As known in the art, software code comprises instructions that may be used to control or instruct the operation of one or more processing devices, such as microprocessors, microcontrollers, co-processors, etc. Indeed, software code is ubiquitous and pervades many aspects of modern day technology. Further, it is not uncommon for software development projects to require the services of numerous software code developers and their supervisors for periods of time stretching over many months or even years. In order to produce, well-designed, efficient code, it is crucially important to engage in quality assessments, i.e., to take those steps necessary to ensure code is being written in accordance with industry and project-specific quality standards and is meeting appropriately defined benchmarks. Usually, project code quality standards and benchmarks are pre-defined for a project, either by the customer, by the software development service provider or both.
As known in the art, the quality of software code may be established through a variety of techniques including, but not limited to, static analysis and dynamic analysis (i.e., runtime testing). As known in the art, static analysis may be performed using manual or automated techniques. For example, in the case of software developed using “JAVA” programming, various automated tools such as Checkstyle, FindBugs and PMD may be employed to determine whether software code has been developed such that it fails to adhere to or violates accepted coding standards. While the ability to automatically collect information of this type is certainly beneficial, those having ordinary skill in the art will appreciate that determining the existence of coding standard violations doesn't necessarily provide an accurate picture of the overall quality of the software code.
For example, simple determination of numbers of coding violations does not always translate to an accurate representation of software code quality because not all violations are equivalent. That is, certain critical coding standard violations will inevitably have a greater negative impact on software code quality than other types of non-critical violations. Thus, a portion of software code that has a relatively large number of non-critical violations may still have greater perceived quality than a comparable portion of software code that gives rise to a single critical violation. It is known in the art for static analysis tools, such as those mentioned above, to categorize violations according to some standard of criticality. However, given the divergent nature of the specific checking performed by the different analysis tools as well as the non-standardized definition of the criticality of respective identified coding standard violations, the determination of software code quality remains an oftentimes difficult interpretive task. On sufficiently large software coding projects, the simple size of the code base may prevent any meaningful determination of overall software code quality despite the existence of automated static analysis tools.
Further still, those having ordinary skill in the art will appreciate that automated static analysis tools cannot provide 100% coverage of all potential coding standards violations. That is, while such tools are typically capable of determining coding language syntax errors or the like, they are typically incapable of detecting violations that are more “macroscopic” in nature. For example, software modules that have been perfectly coded in accordance with syntax rules and coding best practices may nevertheless be at odds with high level architectural design of the software code. Under current practice, such violations are only detectable through manual inspection of the software code. Even assuming such manual reviews are performed, the resulting error information still requires (as in the case of the automated analysis results) further interpretation to ascertain the actual quality of the software code.
Thus, it would be advantageous to provide techniques for determining software code quality that overcome the limitations of prior art approaches.